#include "../../Common/Detail.hpp"
#include "../../Server/RpcServer.hpp"

void Add(const Json::Value &req, Json::Value &rsp)
{
    int num1 = req["num1"].asInt();
    int num2 = req["num2"].asInt();
    rsp = num1 + num2;
}

int main()
{
    // 对与rpc服务端
    // 1. 向服务中心进行服务注册
    // 1.1 通过工厂模式组织提供的服务的描述字段
    RpcModule::ServerModule::ServiceDescribeFactory::ptr factory =
        std::make_shared<RpcModule::ServerModule::ServiceDescribeFactory>();
    factory->SetCallBack(Add);
    factory->SetMethodName("Add");
    factory->SetParamsDesc("num1", RpcModule::ServerModule::RpcType::INTEGRAL);
    factory->SetParamsDesc("num2", RpcModule::ServerModule::RpcType::INTEGRAL);
    factory->SetReturnType(RpcModule::ServerModule::RpcType::INTEGRAL);
    // 1.2 通过工厂创建出Add服务的描述对象
    RpcModule::ServerModule::ServiceDescribe::ptr describe = factory->Build();
    // 1.3 将Add服务的描述添加到服务端
    RpcModule::Address access_addr(std::make_pair("127.0.0.1", 9090));   // 监听的客户端的端口
    RpcModule::Address registry_addr(std::make_pair("127.0.0.1", 8085)); // 用于向服务中心发送服务注册
    // true -- 需要进行服务注册
    RpcModule::ServerModule::RpcServer::ptr server =
        std::make_shared<RpcModule::ServerModule::RpcServer>(access_addr, true, registry_addr);
    server->RegisterMethod(describe);
    // 2. 启动服务端
    server->Start();
    return 0;
}